package day20170505.ch04;

/**
 * 二叉树的操作类
 * @author 罗智壕-13424431416
 *
 * 2017年5月5日
 */
public class BTree {
	
	/**
	 * 根节点
	 */
	@SuppressWarnings("unused")
	private Node head;
	
	/**
	 * 构造方法
	 * @param head
	 */
	public BTree(Node head) {
		this.head = head;
	} 
	
	public BTree(){}
	
	/**
	 * 二叉树的增加方法
	 * @param parentNode	上一层节点（参照物节点）
	 * @param addNode		需要增加的节点
	 */
	public void addBTreeNode(Node parentNode,Node addNode){
		//获取当前的节点（第一次是根节点）
		Node temp = parentNode;
		
		//如果加入的节点小于当前节点
		if(addNode.getData() < temp.getData()){
			//如果当前的左节点为空，直接赋值
			if(null == temp.getLeftNode()){
				temp.setLeftNode(addNode);
			}else{
				//如果有值，进行递归，循环到没有值为止
				this.addBTreeNode(temp.getLeftNode(), addNode);
			}
		}else{
			//如果当前的右节点为空，直接赋值
			if(null == temp.getRightNode()){
				temp.setRightNode(addNode);
			}else{
				//如果有值，进行递归，循环到没有值为止
				this.addBTreeNode(temp.getRightNode(), addNode);
			}
		}
	}
	
	/**
	 * 二叉树先序遍历
	 * @param parent	根节点
	 */
	public void findBTreeNode(Node parent){
		if (null == parent)  
            return;  
        System.out.print(parent.getData() + " ");  
        this.findBTreeNode(parent.getLeftNode());  
        this.findBTreeNode(parent.getRightNode());  
	}
	
	/**
	 * 查询最大值
	 * @param parent	上一层节点（第一次是根节点）
	 * @return
	 */
	public Node findTreeMax(Node parent){
		Node temp = parent;
		if(null == temp.getRightNode()){
			return temp;
		}else{
			return this.findTreeMax(temp.getRightNode());
		}
	}
}
